#ifndef _SYS_URI_SCHEME_H_
#define _SYS_URI_SCHEME_H_

#include "FanObj.h"
#include "SysTypes.h"

#define URI_SCHEME_VTABLE(self)   ((UriSchemeVTable*)((FanObj*)self)->vtable)


extern Type*    UriScheme_classType;
extern VTable*  UriScheme_classVTable;


/* [sys::UriScheme] Attributes */
struct UriScheme
{
  FanObj        super;
};


/* [sys::UriScheme] Virtual-table */
typedef struct UriSchemeVTable
{
  FanObjVTable  super;
  NullableObj   (*get)(UriScheme* self, Uri* uri, NullableObj base);
} UriSchemeVTable;


/* [sys::UriScheme] Methods and fields */
void            UriScheme_make(UriScheme* self);
Str*            UriScheme_toStr(Obj self);
UriScheme*      UriScheme_find_1(Str* scheme);
UriScheme*      UriScheme_find(Str* scheme, Bool checked);
Str*            UriScheme_scheme(UriScheme* self);
NullableObj     UriScheme_get(UriScheme* self, Uri* uri, NullableObj base);


/* [sys::UriScheme] Type-system functions */
Type*           UriScheme_initType(void);
VTable*         UriScheme_initVTable(void);
void            UriScheme_initStatic(void);


#endif
